<?php
include_once("connect.php");
include_once("pager.php");
include_once "views/include/class.phpmailer.php";

class DbTable extends getDivPage {

    /**
     * Các @param được sử dụng trong hàm insert
     * @param VarA  $table_name Nhập vào tên bảng trong cơ sở dữ liệu
     * @param VarB  $array_field Nhập một mảng gồm các trường trong cơ sở dữ liệu
     * @todo ví dụ mảng $array_field = array("id" => "","Name"=>"'foo'")
     * @todo với id và Name là các trường trong CSDL
     */
    public static function insert($table_name, $array_field) {
        $array_field = join($array_field, ',');
        $sql = "insert into {$table_name} values($array_field)";                        
        return mysql_query($sql);
    }
    /**
     * Các @param được sử dụng trong hàm update
     * @param VarA  $table_name Nhập vào tên bảng trong cơ sở dữ liệu
     * @param VarB  $array_field Nhập một mảng gồm các trường trong cơ sở dữ liệu
     * @param VarC  $id khóa chính trong bảng muốn update
     * @todo ví dụ mảng $array_field = array("Name"=>"'foo'","Email" => "'example@gmail.com'")
     * @todo với Name và Email là các trường bạn muốn update
     */
    public static function update($table_name, $array_field, $id) {        
        $args = array();
        foreach ($array_field as $key => $value) {
            $args[] = "{$key}={$value}";
        }
        $array_field = join($args, ',');
        $sql = "update {$table_name} set {$array_field} where id='{$id}'";                        
        return mysql_query($sql);
    }
    /**
     * Các @param được sử dụng trong hàm updateArgs
     * @param VarA  $table_name Nhập vào tên bảng trong cơ sở dữ liệu
     * @param VarB  $array_field Nhập một mảng gồm các trường trong cơ sở dữ liệu
     * @param VarB  $args trường update theo điều kiện nào đó
     * @todo Hàm này có chức năng update toàn bộ một trường về một giá trị nào đó trong $array_field
     * @todo ví dụ args: update myTable theo trường tên và trường email : args = array("name"=>'myName',"email"=>"myEmail@gmail.com");
     * @todo => câu lệnh update : update myTable set ... where name='myName' and email = 'myEmail@gmail.com'
     */
    public static function updateArgs($table_name, $array_field, $args) {        
        $args_field = array();
        $condition = array();
        foreach ($array_field as $key => $value) {
            $args_field[] = "{$key}={$value}";
        }
        foreach ($args as $key => $value) {
            $condition[] = "{$key}={$value}";
        }
        $array_field = join($args_field, ',');
        $args = join($condition," and ");
        $sql = "update {$table_name} set {$array_field} where {$args}";        
        return mysql_query($sql);
    }
    /**
     * Các @param được sử dụng trong hàm updateAll
     * @param VarA  $table_name Nhập vào tên bảng trong cơ sở dữ liệu
     * @param VarB  $array_field Nhập một mảng gồm các trường trong cơ sở dữ liệu     
     * @todo Hàm này có chức năng update toàn bộ một trường về một giá trị nào đó trong $array_field
     */
    public static function updateAll($table_name, $array_field) {        
        $args = array();
        foreach ($array_field as $key => $value) {
            $args[] = "{$key}={$value}";
        }
        $array_field = join($args, ',');
        $sql = "update {$table_name} set {$array_field}";
        return mysql_query($sql);
    }
    /**
     * Các @param được sử dụng trong hàm delete
     * @param VarA  $table_name Nhập vào tên bảng trong cơ sở dữ liệu
     * @param VarB  $id khóa chính trong bảng muốn xóa
     * @todo Hàm này có chức năng xóa một trường nào đó trong một bảng theo $id
     */
    public static function delete($table_name, $id) {
        $sql = "delete from {$table_name} where id={$id}";
        return mysql_query($sql);
    }
    /**
     * Các @param được sử dụng trong hàm getData
     * @param VarA  $sql câu lệnh SQL truyền vào thường là Select     
     * @todo Hàm này sẽ trả về một mảng kết quả
     */
    public static function getData($sql) {
        $result = mysql_query($sql);
        $arr = array();
        while ($row = mysql_fetch_array($result)) {
            $arr[] = $row;
        }        
        mysql_free_result($result);
        return $arr;
    }

    public function getSQLToDivPage($sql, $begin, $end) {
        $sql .=" limit {$begin},{$end}";                
        $result = mysql_query($sql);
        $arr = array();
        while ($row = mysql_fetch_array($result)) {
            $arr[] = $row;
        }        
        mysql_free_result($result);
        return $arr;
    }
    /**
     * <b>Phân trang</b></p>
     * Các @param được sử dụng trong hàm Paging
     * @param VarA  $page truyền vào một thể hiện của lớp pager
     * @param VarB  $sql truyền vào một câu lệnh SQL (Cậu lệnh Select)
     * @param VarC  $url truyền vào một url để lấy về page
     * @todo $page = new pager();
     * @todo $sql = "select * from myTable";
     * @todo $url = "?page=";
     */
    public static function Paging(pager $page, $sql, $url,$sobanghi) {
        extract(parent::getDataToDivPage($page, self::getData($sql), $url,$sobanghi));
        return self::getSQLToDivPage($sql, $begin, $end);
    }
    /**
     * Các @param được sử dụng trong hàm JsonEncode
     * @param VarA  $sql câu lệnh SQL truyền vào thường là Select
     * @todo Hàm này sẽ trả về một mảng Json với kết quả đơn
     */
    public static function JsonEncode($sql) {
        $result = mysql_query($sql);
        $arr = array();
        while ($row = mysql_fetch_array($result)) {
            $arr = $row;
        }
        mysql_free_result($result);
        return json_encode($arr);
    }
    /**
     * Các @param được sử dụng trong hàm JsonEncode
     * @param VarA  $sql câu lệnh SQL truyền vào thường là Select
     * @todo Hàm này sẽ trả về một mảng Json với nhiều kết quả
     */
    public static function JsonEncodeArray($sql) {
        $result = mysql_query($sql);
        $arr = array();
        while ($row = mysql_fetch_array($result)) {
            $arr[] = $row;
        }
        mysql_free_result($result);
        return json_encode($arr);
    }
    /**          
     * @todo Hàm này sẽ trả về một giá trị đơn từ câu lệnh SQL
     * @todo ví dụ: select name from myTable where id='1' => <br /> hàm này sẽ trả về name với id = 1
     */
    public static function Single($sql) {
        $result = mysql_query($sql);        
        $row = mysql_fetch_row($result);   
        mysql_free_result($result);
        return $row[0];
    }
    /**
     * @todo Hàm này sẽ trả về một mảng giá trị từ câu lệnh SQL
     * @todo ví dụ: select * from myTable where id='1' => <br /> hàm này sẽ trả về dòng có id=1
     */
    public static function First($sql) {
        $result = mysql_query($sql);
        $row = mysql_fetch_row($result);
        mysql_free_result($result);
        return $row;
    }
    //hungnv -- gửi email
    public static function getConnect() {        
        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->CharSet = 'UTF-8';
        $mail->Host = "smtp.gmail.com";
        $mail->Port = 465;
        $mail->SMTPAuth = true;
        $mail->SMTPSecure = 'ssl';
        $mail->Username = "hungxdtest@gmail.com";
        $mail->Password = "qzol20101989";            
    }
    public static function SendMail(PHPMailer $mail,$emailTo, $subject,$body,$nameSend) {        
        $from = "hungxdtest@gmail.com";
        $to = "{$emailTo}";
        $name = "{$nameSend}";
        $mail->From = $from;
        $mail->FromName = $name;
        $mail->AddAddress($to, $name);
        $mail->AddReplyTo($from, $name);
        $mail->WordWrap = 150;
        $mail->IsHTML(true);
        $mail->Subject = $subject;
        $mail->Body = $body;
        $mail->AltBody = "";
        if (!$mail->Send()) {
            return false;
        }
        return true;
    }

}
?>
